#include "GlobalHeader.h"
#include "StdSem.h"



int semID = 0;

void signalHandler(int sig)
{
    exit(1);  
}

void RemoveSem()
{
    sleep(1);
    printf("退出删除信号量!\n");
    //删除信号量
    semctl(semID,0,IPC_RMID,NULL);
}


int main()
{
    atexit(RemoveSem);
    signal(SIGINT,signalHandler);
    // //获取信号量
    // //获取IPC键值
    // key_t key = ftok("./",2);
    // if(key < 0)
    // {
    //     perror("ftok");
    //     return -1;
    // }

    // //获取信号量
    // //信号量ID
    // int semID = semget(key,1,IPC_CREAT | 0777);
    // if(semID < 0)
    // {
    //     perror("semget");
    //     return -1;
    // }

    // //信号量控制
    // if(semctl(semID,0,SETVAL,1) < 0)
    // {
    //     perror("semctl");
    //     return - 1;
    // }
    Sem *s = InitSem("./",2);

    pid_t pid = fork();
    if(pid < 0)
        return -1;
    if(pid == 0)
    {
        while(1)
        {
            SemP(s);
            printf("子进程进入睡眠!\n");
            sleep(1);
            printf("子进程醒来!\n");
            SemV(s);
        }
    }
    else
    {   
        while(1)
        {
            SemP(s);
            printf("父进程进入睡眠!\n");
            sleep(1);
            printf("父进程醒来!\n");
            SemV(s);
        }
    }

    //删除信号量
    ClearSem(s);
    return 0;
}